/**
 * 获取指定范围内的随机整数
 * @param {number} min - 最小值
 * @param {number} max - 最大值
 * @returns {number} - 随机整数
 * @throws {Error} - 如果min和max不是数字，则抛出错误
 */
export const getRandomNumber = (min, max) => {
  if (typeof min !== 'number' || typeof max !== 'number') {
    throw new Error('min和max必须是数字');
  }
  
  // 确保min不大于max
  if (min > max) {
    [min, max] = [max, min];
  }

  // 返回[min, max]范围内的随机整数
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

/**
 * 判断玩家和电脑的出拳结果，确定胜者
 * @param {number} player - 玩家的出拳结果，0代表剪刀，1代表石头，2代表布
 * @param {number} computer - 电脑的出拳结果，0代表剪刀，1代表石头，2代表布
 * @returns {number} - 返回胜者的出拳结果，0代表电脑胜，1代表玩家胜，2代表平局
 */
export function determineWinner(player, computer) {
  // 定义游戏规则映射表
  const rules = [
    [2, 0, 1], // 玩家出剪刀
    [1, 2, 0], // 玩家出石头
    [0, 1, 2], // 玩家出布
  ];

  // 根据玩家出拳结果获取对应的规则索引
  const ruleIndex = player;

  // 根据规则判断胜负
  return rules[ruleIndex][computer];
}